package com.zhouyu.exampleThread.lockTest;

import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
 * @Description:读写锁
 * 读写所允许同一时刻被多个读线程访问，但是在写线程访问时，所有的读线程和其他的写线程都会被阻塞、
 * 　ReentrantReadWriteLock支持以下功能：
 *
 * 　　　　1）支持公平和非公平的获取锁的方式；
 *
 * 　　　　2）支持可重入。读线程在获取了读锁后还可以获取读锁；写线程在获取了写锁之后既可以再次获取写锁又可以获取读锁；
 *
 * 　　　　3）还允许从写入锁降级为读取锁，其实现方式是：先获取写入锁，然后获取读取锁，最后释放写入锁。但是，从读取锁升级到写入锁是不允许的；
 *
 * 　　　　4）读取锁和写入锁都支持锁获取期间的中断；
 *
 * 　　　　5）Condition支持。仅写入锁提供了一个 Conditon 实现；读取锁不支持 Conditon ，readLock().newCondition() 会抛出 UnsupportedOperationException。
 */
public class ReadWriteLock {

  public void readLock() {
    ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
    ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.writeLock();
    ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock();
  }
}
